/*
 * Copyright (c) 2025 Huawei Device Co., Ltd.
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package EtsAniTests

{% if type != "string" and (arm32 == "false" or type != "float") -%}
@ani.unsafe.Direct
native function returnDirect{{ Type }}(): {{ type }}

@ani.unsafe.Direct
native function checkDirect{{ Type }}(a: {{ type }}): void
{% endif %}
@ani.unsafe.Quick
native function returnQuick{{ Type }}(): {{ type }}

@ani.unsafe.Quick
native function checkQuick{{ Type }}(a: {{ type }}): void

native function return{{ Type }}(): {{ type }}

native function check{{ Type }}(a: {{ type }}): void

function testReturn{{ Type }}() {
    let a: {{ type }} = return{{ Type }}()
    check{{ Type }}(a)
    {% if type != "string" and (arm32 == "false" or type != "float") -%}
    let b: {{ type }} = returnDirect{{ Type }}()
    checkDirect{{ Type }}(b)
    {% endif -%}
    let c: {{ type }} = returnQuick{{ Type }}()
    checkQuick{{ Type }}(c)
}

function main() {
    loadLibrary("returns_{{ type }}")
    testReturn{{ Type }}()
}

